home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / cli / mx2src.arc / MX2.MOD < prev    next >
Text File  |  1989-01-05  |  39KB  |  1,165 lines

  1. (*$T-,$S-,$A+ *)
  2. MODULE MX2;
  3.  
  4. (*              Copyright 1987,1988 fred brooks LogicTek        *)
  5. (*                                                              *)
  6. (*                                                              *)
  7. (*   First Release                      12/8/87-FGB             *)
  8. (* Corrected code to match changes in lib modules               *)
  9. (*                                      1/9/88-FGB              *)
  10. (* Bug in parser converted all text to UPPER case. Fixed        *)
  11. (*                                      2/27/88-FGB             *)
  12. (* Misc bug fixes.                                              *)
  13. (*                                      4/3/88-FGB              *)
  14. (* Remove NETWORK routines from kernel                          *)
  15. (*                                      4/11/88-FGB             *)
  16. (* Remove SP & XMODEM  routines from kernel                     *)
  17. (*                                      4/11/88-FGB             *)
  18. (* Remove TRAP15 interface routines     6/9/88-FGB              *)
  19. (*                                                              *)
  20.  
  21.   FROM Terminal       IMPORT     ReadString,WriteString,WriteLn;
  22.   FROM TextIO         IMPORT     REadString;
  23.   FROM Conversions    IMPORT     ConvertFromString;
  24.   FROM M2Conversions  IMPORT     ConvertToInteger,ConvertToAddr;
  25.   FROM BitStuff       IMPORT     WAnd,WShr;
  26.   FROM GEMDOS         IMPORT     ExecMode,Exec,Alloc,Free,OldTerm,
  27.                                  GetPath,GetDrv,GetTime,
  28.                                  SetPath,SetDrv;
  29.   FROM XBIOS          IMPORT     SuperExec,IOREC,IORECPTR,SerialDevice,
  30.                                  IORec,ScreenPhysicalBase;
  31.   FROM BIOS           IMPORT     Device,BConStat,BConIn,BConOut,BCosStat,
  32.                                  KBShifts,GetKBShift,KBShiftBits;
  33.   FROM Streams        IMPORT     Stream,OpenStream,CloseStream,EOS,
  34.                                  StreamKinds;
  35.   FROM Storage        IMPORT     CreateHeap;
  36.   FROM SYSTEM         IMPORT     ADR,ADDRESS,CODE,PROCESS,REGISTER,SETREG;
  37.  
  38.   FROM   ATOMIC   IMPORT  Initsked,MultiEnd,MultiBegin,CronActive,
  39.                           InitProcesses,StartProcess,currentprocess,
  40.                           TermProcess,SIGNAL,SwapProcess,request,MAGIC,
  41.                           command,SleepProcess,WakeupProcess,
  42.                           ChangeProcessPriority,CRON,DeviceTable,
  43.                           spintenable,spintmask,spint,bpsave,GEMTYPE,
  44.                           sysvariable,gemsaveGvec,ROMDATE,OLDDATE,NEWDATE,
  45.                           NextPid,VERSION,sysmemsize,devicetype;
  46.  
  47.   FROM   SCANNER  IMPORT  scinit,nxparm,ltext,etext,bkparm,state;
  48.  
  49.   FROM   Strings  IMPORT  Compare,Pos,Length,Concat,CompareResults,String;
  50.  
  51.  
  52. CONST   intnum          =       4;    (* interrupt number on MFP *)
  53. TYPE    ctype   =
  54.                   RECORD
  55.                         stime            :       LONGCARD;
  56.                         freq             :       LONGCARD;
  57.                         btime            :       LONGCARD;
  58.                         command          :       String;
  59.                         active           :       BOOLEAN;
  60.                   END;
  61.           screen  =     ARRAY [0..7999] OF LONGCARD;
  62. VAR
  63.        result,pri,cli1,cli2,clipid,
  64.        spawnpid                                 : INTEGER;
  65.        proc                                     : PROC;
  66.        Oportdevice,Iportdevice                  : devicetype;
  67.        pc,returnadr,kpc,
  68.        oldikbd,par                              : ADDRESS;
  69.        gemsave,param                            : ARRAY [0..15] OF ADDRESS;
  70.        paramstringptr                           : POINTER TO String;
  71.        sizewsp,temphz200,cronslice,currenttime  : LONGCARD;
  72.        cmd,dev,c,a7,SR,tbiosSave                : ADDRESS;
  73.        gem   [88H]                              : ADDRESS;
  74.        hz200  [4baH]                            : LONGCARD;
  75.        termvec [408H]                           : ADDRESS;
  76.        linea [28H]                              : ADDRESS;
  77.        gemdos [84H]                             : ADDRESS;
  78.        gsxgem [88H]                             : ADDRESS;
  79.        tbios  [0b4H]                            : ADDRESS;
  80.        xbios  [0b8H]                            : ADDRESS;
  81.        linef  [2cH]                             : ADDRESS;
  82.        level2 [68H]                             : ADDRESS;
  83.        level4 [70H]                             : ADDRESS;
  84.        shellp [04f6H]                           : ADDRESS;
  85.        ikbdvec [118H]                           : PROC;
  86.        OpenCLI,i,bprunning,function,
  87.        time,defaultdrv,requestdrv,sr,drv,
  88.        ksr                                      : CARDINAL;
  89.        cmdstring,temp,name,tail,envstr,pname,
  90.        defaultpath,requestpath,pstemp,initprg   : String;
  91.        inuse,done,
  92.        swloaded,caps,reservemem,swapcli,inok,
  93.        outok                                    : BOOLEAN;
  94.        periods,drivemap,HotKey,Hotreturn,kjunk,
  95.        NorMouse,CurMouse,RebootKey,memreserve,
  96.        SYSMEM,cin                               : LONGCARD;
  97.        crontable                                : ARRAY [0..15] OF ctype;
  98.        ticktime                                 : LONGINT;
  99.        s0                                       : SIGNAL;
  100.        sysvar                                   : sysvariable;
  101.        sysvector [144H]                         : POINTER TO sysvariable;
  102.        Kshift,Hotset,CapsL                      : KBShifts;
  103.        physcreen                                : POINTER TO screen;
  104.        screensave                               : POINTER TO ARRAY [1..2]
  105.                                                   OF screen;
  106.        kbdiorec                                 : IORECPTR;
  107.        ibuf                                     : POINTER TO ARRAY [0..63]
  108.                                                   OF LONGCARD;
  109.  
  110. CONST
  111.   TDI   = "                Written in TDI MODULA-2 Version 3.01a ";
  112.   TITLE1 = "       ";
  113.   TITLE2 = " Copyright LogicTek 1987,1988 Fred Brooks ";
  114.   CRONFILE = "CRONTAB";
  115.  
  116. (*$P- *)
  117. PROCEDURE       keytrapstart; (* modify IKBD system vector *)
  118. BEGIN
  119.         CODE(48e7H,0fffeH);   (* save regs movem  *)
  120.         CODE(206fH,62); (* move.l 62(a7),a0 get pc *)
  121.         kpc:=REGISTER(8);
  122.         CODE(306fH,60); (* move.w 60(a7),a0 get sr *)
  123.         ksr:=CARDINAL(REGISTER(8));
  124.         SETREG(8,ADDRESS(keytrapend));
  125.         CODE(2f48H,62); (* move new pc to stack *)
  126.         SETREG(8,2700H);
  127.         CODE(3f48H,60); (* move new sr to stack *) 
  128.  
  129.         SETREG(8,oldikbd);  (* move IKBD trap adr *)
  130.         CODE(43faH,10); (* lea 12(pc),a1 *)
  131.         CODE(2288H); (* move.l a0,(a1) *)
  132.         CODE(4cdfH,7fffH); (* restore regs movem *)
  133.         CODE(4ef9H,0,0) (* jmp back to routine *)
  134. END     keytrapstart;
  135. (*$P+ *)
  136.  
  137. (*$P- *)
  138. PROCEDURE       keytrapend; (* check for hotkeys *)
  139. BEGIN
  140.         CODE(5d8fH);    (* subq.l #6,sp *)
  141.         CODE(48e7H,0fffeH);   (* save regs movem  *)
  142.  
  143.         Hotreturn:=ibuf^[kbdiorec^.ibuftl DIV 4];
  144.         CODE(2f39H,0,4a2H); (* save BIOS pointers *)
  145.         CODE(4b9H,0,2eH,0,4a2H);
  146.  
  147.         IF Hotreturn=RebootKey THEN
  148.            CODE(46fcH,0300H); (* set user mode *)
  149.            CODE(42a7H,3f3cH,20H,4e41H,42b9H,0H,420H,2079H,0H,4H,4ed0H);
  150.         END;
  151.         IF Hotreturn=NorMouse THEN
  152.            gkey;
  153.            BConOut(KDB,CHAR(08H)); (* send relative mouse *)
  154.         END;
  155.         IF Hotreturn=CurMouse THEN
  156.            gkey;
  157.            BConOut(KDB,CHAR(0aH)); (* send cursor mouse *)
  158.         END;
  159.         IF Hotreturn=HotKey THEN
  160.            gkey;
  161.            swapcli:=TRUE;
  162.         END;
  163.  
  164.         CODE(23dfH,0,4a2H); (* restore BIOS pointers *)
  165.  
  166.         SETREG(8,ADDRESS(kpc));
  167.         CODE(2f48H,62); (* move new pc to stack *)
  168.         SETREG(8,ADDRESS(ksr));
  169.         CODE(3f48H,60); (* move new sr to stack *) 
  170.         CODE(4cdfH,7fffH); (* restore regs movem *)
  171.         CODE(4e73H); (* rte *)
  172. END     keytrapend;
  173. (*$P- *)
  174.  
  175. (*$P- *)
  176. PROCEDURE       gkey;
  177. BEGIN
  178.         IF BConStat(CON) THEN 
  179.            kjunk:=BConIn(CON);
  180.            ibuf^[kbdiorec^.ibuftl DIV 4]:=0;
  181.         END;
  182.         CODE(4e75H); (* rts *)
  183. END             gkey;
  184. (*$P+ *)
  185.  
  186. PROCEDURE       SetDrvPath(drive: CARD